#include <stdio.h>
// 1、	从键盘输入6个整数，保存到一个整数数组中，倒序输出这6个数。
int fn1(){
	// 声明一个常量size read-only variable 只读的变量
	const int size = 6;
	int arr[size];
	for(int i=0;i<size;i++){
		printf("输入第%d个数字：",i+1);
		scanf("%d",&arr[i]);
	}
	// 倒序输出数组的元素
	for(int i=size-1;i>=0;i--){
		if(i!=0){
			printf("arr[%d]=%d,",i,arr[i]);
		}else if(i==0){
			printf("arr[%d]=%d",i,arr[i]);
		}
	}
	return 0;
}

// 2 从键盘输入10个浮点数，统计10个浮点数的和、平均值。
int fn2(){
	// 声明数组
	const int size = 10;
	double arr[size];
	// 初始化数组元素
	for(int i=0;i<size;i++){
		printf("输入第%d个数字：",i+1);
		scanf("%lf",&arr[i]);
	}
	// 声明计算总和的变量
	double sum  = 0;
	for(int i =0;i<size;i++){
		sum += arr[i];
	}
	// 计算平均值
	double avg = sum / size;
	printf("sum=%.1lf,avg=%.1lf",sum,avg);
	return 0;
}

// 3、	从键盘输入5个整数存入数组中，统计数组中的最大值和最小值。
int fn3(){
	// 声明数组
	const int size = 5;
	int arr[size];
	// 初始化数组元素
	for(int i=0;i<size;i++){
		printf("输入第%d个数字：",i+1);
		scanf("%d",&arr[i]);
	}
	// 声明最大和最小的元素
	int max = arr[0];
	int min = arr[0];
	for(int i=0;i<size;i++){
		if(min>arr[i]){
			min = arr[i];
		}
		if(max<arr[i]){
			max = arr[i];
		}
	}
	printf("min=%d,max=%d",min,max);
	return 0;
}

// 4、	使用for循环输出1-100之间的素数。
int fn4(){
	for(int i =2;i<100;i++){
		int j = 2;
		while(i%j){
			j++;
		}
		if(j==i){
			printf("i=%d\n",i);
		}
	}
	return 0;
}

// 6、	输入10个数，对数组元素的值进行交换，交换方式是：第一个和最后一个交换，倒数第二个和第二个数交换，第三个和到数第三个交换，以此类推，把数组的值全部交换结束为止，输出交换前的数组元素和交换后的数组元素。
int fn6(){
	// 声明数组
	const int size = 10;
	int arr[size];
	// 初始化数组元素
	for(int i=0;i<size;i++){
		printf("输入第%d个数字：",i+1);
		scanf("%d",&arr[i]);
	}
	// 反转交换数组的元素
	for(int i=0,j=size-1;i<j;j--,i++){
		int t = arr[i];
		arr[i] = arr[j];
		arr[j] = t;
	}
	// 查看数组元素
	for(int i =0;i<size;i++){
		printf("arr[%d]=%d\n",i,arr[i]);
	}
	return 0;
}

// 7、	输入一个整数n，当n为偶数时求1/2+1/4+…+1/n的值，当n为奇数时求1/3+1/5+…+1/n的值。
int fn7(){
	int n ;
	printf("输入一个整数：");
	scanf("%d",&n);
	double sum = 0;
	if(n%2){
		for(int i=1;i<=n;i+=2){
			printf("%d\n",i);
			sum += 1.0/i;
		}
	}else{
		for(int i=2;i<=n;i+=2){
			printf("%d\n",i);
			sum += 1.0/i;
		}
	}
	printf("sum=%.6lf",sum);
	return 0;
}

// 求阶乘的函数
int factorial(int n){
	int fact = 1;
	for(int i=0;i<n;){
		i++;
		fact*=i;
	}
	return fact;
}

// 8、	求三位数，该三位数符合条件：abc=a!+b!+c!,输出所有的可能的数字abc.
int fn8(){
	for(int i=100;i<=999;i++){
		int g = i%10;
		int s = i/10%10;
		int b = i/100;
		int _g = factorial(g);
		int _s = factorial(s);
		int _b = factorial(b);
		if(_g+_s+_b==i){
			printf("i=%d,%d,%d,%d\n",i,_g,_s,_b); // i=145,120,24,1
		}
	}
}

// 9 使用数组和循环实现数组结构：a[0]=1,a[1]=1,a[2]=2,a[3]=3,a[4]=5,…，输出数组的前20个元素的值。
int fn9(){
	const int size = 20;
	int arr[size] ;
	arr[0] = arr[1] =1;
	for(int i =2;i<size;i++){
		arr[i] = arr[i-1]+arr[i-2];
	}
	// 输出数组
	for(int i =0;i<size;i++){
		printf("arr[%d]=%d\n",i,arr[i]);
	}
	return 0;
}

int main(){
	fn9();
	return 0;
}